package com.jpa.oneTomany;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * <p>Title:Order</p>
 * <p>Description:</p>
 * @company sinobest 
 * @author Administrator
 * @date 2016年10月17日 下午10:31:12
 * 
 */
@Entity
@Table(name="t_order")
public class Order {

	private String orderid;
	private Float amount;//总的价格
	private Set<OrderItem> items = new HashSet<OrderItem>();
	
	@Id
	@Column(length=36,name="id")
	public String getOrderid() {
		return orderid;
	}
	public void setOrderid(String orderid) {
		this.orderid = orderid;
	}
	
	@Column(nullable=false)
	public Float getAmount() {
		return amount;
	}
	public void setAmount(Float amount) {
		this.amount = amount;
	}
	
	/**
	 * 一对多的关系
	 * cascade 级联操作，
	 *       CascadeType.REFRESH   级联刷新，获取到最新的数据  执行entityManager.refresh(order); 获取最新的数据，防止数据库的数据与Hibernate中的缓存数据不同
	 *       CascadeType.PERSIST   级联保存  保存一的一方也保存多的一方，调用的 entityManager.persist(order) 起作用
	 *       CascadeType.MERGE	       级联合并 对象游离状态的时候，可以进行更新保存到数据库(级联更新)   entityManager.merge(order) 起作用
	 *       CascadeType.DETACH    级联删除  删除多的之后删除一的 ，执行 entityManager.remove(order);起作用 
	 */
	@OneToMany(cascade={CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.MERGE,CascadeType.DETACH},
			fetch=FetchType.LAZY //FetchType.LAZY（默认的策略） 延期加载，在entityManager打开的时候可以获取到数据；FetchType.EAGER 及时加载数据
			//,mappedBy="order"   //关系维护端(在多对一的属性中定义@ManyToOne) 指明维护，定义由谁维护关系
	)
	@JoinColumn(name="order_id") //外键的名称
	public Set<OrderItem> getItems() {
		return items;
	}
	public void setItems(Set<OrderItem> items) {
		this.items = items;
	}
	
}
